home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / Libraries / New WASTE Handlers / Proxies / WEProxy.c < prev    next >
Text File  |  1995-06-06  |  3KB  |  111 lines

  1. // ————• WASTE Proxy Object—————————————————————————————————————————————————————————————
  2. // ———• by Chris K. Thomas, ckt@guest.apple.com
  3. // —• a proxy object is one that represents an object
  4. // —• which cannot be displayed, due to memory, system software, or whatever
  5.  
  6. // ——• 4 Jun 95 ckt
  7.  
  8. // ————• Includes——————————————————————————————————————————————————————————————————————
  9.  
  10. #include "WEProxy.h"        // ——• ourself
  11.  
  12. // ————• Macros————————————————————————————————————————————————————————————————————————
  13.  
  14. #define ThrowIfOSErr_(x) if(x != noErr) goto Exit
  15.  
  16. // ————• Constants—————————————————————————————————————————————————————————————————————
  17.  
  18. static const short kIconSize = 32;
  19. static const short kIconStartID = 1024;
  20. static const short kNumIcons = 5;
  21.  
  22. // ————• Instance Variables————————————————————————————————————————————————————————————
  23.  
  24. // ————• Static Prototypes—————————————————————————————————————————————————————————————
  25.  
  26. static pascal OSErr    HandleNewProxy(Point *defaultObjectSize, WEObjectReference objectRef);
  27. static pascal OSErr    HandleDispose3D(WEObjectReference objectRef );
  28. static pascal OSErr    HandleDraw3D(Rect *destRect, WEObjectReference objectRef );
  29.  
  30. static UniversalProcPtr    sNew3DRD;
  31. static UniversalProcPtr    sDispose3DRD;
  32. static UniversalProcPtr    sDraw3DRD;
  33.  
  34. // ————• Installer——————————————————————————————————————————————————————————————————————
  35.  
  36. OSErr WEObjProxyInstall(FlavorType inDataFlavor, inWEHandle inWaste)
  37. {
  38.     OSErr theErr = noErr;
  39.     
  40.     // * mixed mode magic
  41.     
  42.     if(sNew3DRD == NULL)
  43.     {
  44.         sNew3DRD = NewWENewObjectProc(HandleNew3D);
  45.         sDispose3DRD = NewWEDisposeObjectProc(HandleDispose3D);
  46.         sDraw3DRD = NewWEDrawObjectProc(HandleDraw3D);
  47.     }
  48.     
  49.     // * install
  50.     
  51.     theErr = WEInstallObjectHandler(inDataFlavor, weNewHandler, sNew3DRD, inWaste);
  52.     ThrowIfOSErr_(theErr);
  53.     
  54.     theErr = WEInstallObjectHandler(inDataFlavor, weDisposeHandler, sDispose3DRD, inWaste);
  55.     ThrowIfOSErr_(theErr);
  56.     
  57.     theErr = WEInstallObjectHandler(inDataFlavor, weDrawHandler, sDraw3DRD, inWaste);
  58.     ThrowIfOSErr_(theErr);
  59.  
  60. Exit:    
  61.     return theErr;
  62. }
  63.  
  64. // ————• New handler—————————————————————————————————————————————————————————————————————
  65. pascal OSErr    HandleNewProxy(Point *outDefaultSize, WEObjectReference inObjectRef)
  66. {
  67.     OSErr            theErr = noErr;
  68.     
  69.     outDefaultSize->h = kIconSize;
  70.     outDefaultSize->v = kIconSize;
  71.     
  72.     WESetObjectRefCon(0, inObjectRef);
  73.     
  74. Exit:
  75.     return theErr;
  76. }
  77.  
  78. // ————• Dispose handler—————————————————————————————————————————————————————————————————
  79. pascal OSErr    HandleDispose3D(WEObjectReference inObjectRef)
  80. {
  81.     OSErr            theErr = noErr;
  82.     ViewerObject    curViewer;
  83.     Handle            data;
  84.     
  85.     // * dispose data
  86.     data = WEGetObjectDataHandle(objectRef);
  87.     DisposeHandle(data);
  88.     
  89.     return theErr;
  90. }
  91.  
  92. // ————• Draw handler————————————————————————————————————————————————————————————————————
  93. pascal OSErr    HandleDraw3D (Rect *inDestRect, WEObjectReference inObjectRef)
  94. {
  95.     OSErr            theErr = noErr;
  96.     WEHandle        ourWE;
  97.     ViewerObject    curViewer;
  98.     
  99.     // * retrieve port
  100.     curViewer = (ViewerObject)WEGetObjectRefCon(inObjectRef);
  101.     
  102.     // * use new rectangle
  103.     theErr = Q3ViewerSetBounds(curViewer, inDestRect);
  104.     ThrowIfOSErr_(theErr);
  105.       DrawS r
  106.     // * draw
  107.     theErr = Q3ViewerDraw(curViewer);
  108.     
  109. Exit:
  110.     return theErr;
  111. }